package 反射注解封装自动测试框架;

/**
 * @Auther:云尚学Java
 */

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.lang.reflect.Method;

/**
 * 功能描述：
 * 测试框架类，此类一旦运行就能够检测出我们指定的程序是否存在bug
 * <p>
 * 实现步骤：
 * 1.获取所有方法
 * 2.判断是否加了注解进行bug的检测
 * 3.如果加了，去执行方法，
 * 如果有异常，记录异常信息，并把信息输出到本地硬盘的bug.txt文件中
 * <p>
 * 效果：
 * 达到预期效果
 */
public class TestCheck {
    public static void main(String[] args) throws Exception {
        //1.创建计算器类对象
        Calculator calculator=new Calculator();
        //2.获取字节码文件对象
        Class cla1=calculator.getClass();
        //3.获取所有的方法
        Method[] methods=cla1.getMethods();
        //将形成的异常记录信息，写到bug.txt文件中
        /* BufferedReader bw = new BufferedReader(new FileWriter("D://bug.txt"));*/
        BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter("D://bug.txt"));
        int count=0;
        //遍历获取到的所有方法
        for(Method m:methods){
            /**
             * 检测指定的程序Calculator这个类是否存在异常方法
             * 判断方法是否有加了注解
             */
            if(m.isAnnotationPresent(Check.class)){
                //有，执行方法
                try {
                    //没有，不执行方法
                    m.invoke(calculator);
                }catch (Exception e){
                    count++;//用来记录出现bug异常的测试的
                    bufferedWriter.write(m.getName()+"方法出现异常了");
                    bufferedWriter.newLine();
                    bufferedWriter.write("异常名称："+e.getCause().getClass().getSimpleName());
                    bufferedWriter.write("--------");
                    bufferedWriter.newLine();
                }
            }
        }
    }
}
